image-2.png

PROJETO DE ANÁLISE E TRANSFORMAÇÃO DE DADOS

Relatório + Código

Trabalho realizado por:

Introdução

No âmbito da cadeira de Análise e Transformação de Dados realizamos um mini-projeto, onde analisamos uma Data Set composto por 12 atividades. O objetivo foi classificar/analisar os dados, nos domínios de tempo e frequência. A Data Base está dividido em 3 grupos distintos:

Estas atividades foram captadas a uma frequência constante de 50 Hz , usando sinais recolhidos através de acelerômetros de smartphones recolhendo dados dos 3 eixos espaciais (X ,Y ,Z).

Neste relatório analisamos e discutimos os resultados obtidos, de acordo com as perguntas propostas pelo professor da cadeira e pela Data Set atribuída a cada turma prática (acc_exp42_user21.txt a acc_exp49_user24.txt).

Exercicio 1

Para importarmos os valores utilizamos a função “open_users_data” para ler os valores presentes nos ficheiros de cada experiência e a função “open_labels” para a leitura do ficheiro “labels”, que contém as informações referentes aos intervalos de cada atividade para cada experiência.

Exercicio 2

De seguida, estes sinais são processados pela função “plot_signals_activities”, que apresenta um gráfico para cada sinal, separando cada atividade com uma cor e identificando-a com o seu devido nome.

Exercícios 3.1, 3.2 e 3.4

No exercício 3.1, dividimos o sinal pelas diversas atividades enunciadas anteriormente, onde analisamos o sinal de cada atividade separadamente. Deste modo ao dar plot do sinal em questão, retiramos a tendência com o auxílio da função detrend, onde o seu primeiro argumento recebe um array onde o sinal está guardado e retorna o mesmo mas sem a tendência. O uso da função detrend permite-nos analisar com mais rigor vários padrões existentes ao longo de toda o período de existência da atividade a ser analisada. Sem o uso do detrend não seria possível identificar esses padrões, sendo apenas visível um pico mais elevado que todos os outros, correspondente à tendência dos dados.

Uma vez que temos o sinal livre de tendência podemos calcular a sua DFT e analisar com rigor todos os padrões existentes menos intensos.

Foram também usadas 3 janelas distintas (Blackman, Hamming e Hanning), tendo sido alvos de estudo para escolher a janela que beneficia mais a análise dos gráficos, sem retirar nenhuma informação relevante e sem fazer aproximações "grosseiras" da janela original. O processo de windowing consiste em alterar a forma de um sinal, sendo que quanto maior a janela melhor serão os resultados.

image.png

Tabela 1 - Magnitudes máximas de cada janela aplicada

Após a análise dos gráficos, optamos por utilizar a janela de Hamming ao longo do nosso projeto. Decidimos desta forma porque, após aplicarmos esta janela ao sinal e analizarmos o cálculo das magnitudes máximas para a atividade "Walking", nos 3 eixos, verificámos que existia uma maior aproximação dos valores dessa janela e dos valores do sinal sem nenhuma janela aplicada. Ao contarmos o número de passos, verificámos que o número de passos está dentro, ou muito próximo, do intervalo de passos por minuto para uma pessoa normal (90 a 130 passos por minuto), de acordo com o seguinte excerto, retirado de um documento sugerido, pelos professores, para a realização deste projeto:

“The cadence of an average person walking is within [90, 130] steps/min [14], i.e. a minimum of 1.5 steps/sec” - A Public Domain Dataset for Human Activity Recognition Using Smartphones - Davide Anguita, Alessandro Ghio, Luca Oneto, Xavier Parra and Jorge L. Reyes-Ortiz

No excerto de código em baixo foi calculado o valor médio de passos e o seu desvio padrão para as 3 atividades dinâmicas, nos 3 eixos. Nesse cálculo não foi usada nenhuma das janelas referidas em cima. Para calcular o número de passos foi usada a função, da biblioteca scipy.signal, _findpeaks(), que retorna um tuplo em que o primeiro elemento é um array com os índices de todos os picos existentes na DFT do sinal. Com isso verificamos o número de picos e calculamos a média e o desvio padrão para cada atividade dinâmica, em cada eixo.

Exercícios 3.3, 3.5 e 3.6

image.png

Na imagem acima podemos verificar o plot dos vários picos de cada atividade, para cada experiência, sendo que cada símbolo tem um tipo de atividade atribuído. Os círculos representam as atividades dinâmicas, os '+' as atividades estáticas e, por fim, os losangos representam as atividades de transição. Podemos facilmente identificar as atividades dinâmicas, visto que as magnitudes destas estão muito mais afastadas do 0, em todos os eixos, do que as outras atividades. Em relação às atividades estáticas, verificamos que as suas magnitudes se encontram muito perto do 0, tornando-as também facilmente indentificáveis. Como seria de esperar as magnitudes das atividades de transição estão em posições entre as magnitudes das atividades estáticas e as dinâmicas. Como nós usamos o valor mínimo de cada magnitude máxima as atividades dinâmicas estão muito mais afastadas das restantes, enquanto que nos máximos das magnitudes máximas as dinâmicas iriam estar mais aproximadas das de transição e as as estáticas continuariam a estar bastante próximas do 0.

image-6.png

image-7.png

image-8.png

image-9.png

Através da análise das magnitudes máximas e mínimas de cada atividade é possível fazer uma distinção entre os diferentes tipos de atividades. Como foi verificado no gráfico a 3 dimensões as atividades dinâmicas apresentam valores substancialmente superiores, tanto nas magnitudes máximas como nas mínimas. No entanto, esta análise não pode ser levada em conta a 100% pois não é exata, devido ao cálculo da DFT correspondente ao sinal ser uma aproximação do real, tendo uma precisão, também, algo inferior a 100%, não trazendo muita fiabilidade aos valores.

Estes conceitos de exatidão e precisão podem ser relacionados com os de sensibilidade e especificidade, sendo que a sensibilidade poderia ser testada experimentalmente, tal como é feito em vários estudos relativos à área da saúde, no entanto, não é o objetivo deste projeto, daí ser apenas feita uma pequena referência destes dois conceitos.

Exercício 4.1 e 4.2

A análise de um sinal através do uso de um espectograma é necessária para analisar com rigor as variações de frequência do sinal ao longo do tempo, sendo útil quando é necessário determinar quando uma frequência ocorre, dando a exata ordem em que uma frequência ocorre. Testámos várias janelas deslizantes e chegámos a um tamanho de janela 0.005 vezes menor que o tempo de atividade do utilizador a ser testado. Esta pequena diferença de janelas permite-nos identificar, com maior facilidade, as diferentes atividades no espetro. Usamos também uma sobreposição de 50%, que nos confere uma melhor continuidade temporal e, devido a nos fornecer alguma redundância, nos dá também alguma segurança na análise dos dados, de forma a evitar perdas de informação.

Através da análise dos 2 gráficos resultantes da função _plotSTFT() podemos verificar que de facto a ocorrência das atividades é igual para as duas ocasiões, sendo ainda mostrado as diferentes transições de atividades.

Conclusão

Em suma, no desenvolver deste projeto conseguimos aprofundar o nosso conhecimento acerca da manipulação de dados em função do tempo e da sua frequência. Além disto, aprendemos bastante sobre STFTs e, acima de tudo DFTs e como estes podem influenciar a maneira como utilizamos os dados e informações ao nosso dispor.

Funções utilizadas ao longo do projeto